%% 第九章：排队论与无线通信 - 模块化主仿真脚本
% 排队论在无线通信系统中的应用
% 作者：周勇
% 日期：2024年

clc;
clear all;
close all;

%% 添加路径
addpath('../Common');

%% 获取颜色定义
colors = color_definitions();

%% 基本参数设置
arrival_rates = 0.1:0.1:0.9; % 到达率 (归一化)
service_rates = 1; % 服务率 (归一化)
num_simulations = 10000; % 仿真次数

fprintf('=== 排队论与无线通信 ===\n');

%% 9.1 排队论基础
fprintf('\n--- 9.1 排队论基础 ---\n');

% 调用模块化函数进行排队论基础分析
results_basics = queuing_theory_basics('arrival_rates', arrival_rates, 'service_rate', service_rates);

%% 9.2 无线通信中的排队模型
fprintf('\n--- 9.2 无线通信中的排队模型 ---\n');

% 调用模块化函数进行无线排队模型分析
results_wireless = wireless_queuing_models('arrival_rates', arrival_rates, 'num_simulations', num_simulations);

%% 9.3 多用户调度中的排队分析
fprintf('\n--- 9.3 多用户调度中的排队分析 ---\n');

% 调用模块化函数进行多用户调度排队分析
results_scheduling = multiuser_scheduling_queuing('arrival_rates', arrival_rates, 'num_simulations', 1000);

%% 9.4 无线分组网络中的排队
fprintf('\n--- 9.4 无线分组网络中的排队 ---\n');

% 调用模块化函数进行无线网络排队分析
flow_rates = 0.1:0.1:0.8; % 流量强度
results_network = wireless_network_queuing('flow_rates', flow_rates, 'network_size', 5, 'transmission_range', 1.0);

%% 结果保存与总结
fprintf('\n--- 结果保存 ---\n');

% 创建结果文件夹（在当前章节目录下）
if ~exist('results', 'dir')
    mkdir('results');
end

% 保存所有结果到当前章节目录
save('results/queuing_theory_results.mat', ...
     'results_basics', 'results_wireless', 'results_scheduling', 'results_network');

fprintf('结果已保存到 Chapter09_QueuingTheory/results/queuing_theory_results.mat\n');

%% 总结
fprintf('\n=== 本章总结 ===\n');
fprintf('1. M/M/1模型是排队论的基础，适用于简单系统\n');
fprintf('2. 无线信道中的排队需考虑时变服务率\n');
fprintf('3. 多用户调度中的排队分析揭示了不同调度算法的性能差异\n');
fprintf('4. 无线网络中的排队受拓扑结构和干扰影响\n');
fprintf('5. 网络规模、传输范围等参数显著影响网络性能\n');

fprintf('\n所有结果已保存到 Chapter09_QueuingTheory/results/ 文件夹\n');
fprintf('\n仿真完成！请查看生成的图形窗口。\n');